package com.zenithmind.task.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.task.pojo.entity.TaskTag;
import com.zenithmind.task.pojo.query.TaskTagQuery;
import com.zenithmind.task.pojo.vo.TaskTagVO;

import java.util.List;

/**
 * 任务标签服务接口
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface TaskTagService extends IService<TaskTag> {

    /**
     * 分页查询任务标签列表
     *
     * @param query 查询条件
     * @param userId 当前用户ID
     * @return 分页结果
     */
    PageResult<TaskTagVO> getTaskTagPage(TaskTagQuery query, String userId);

    /**
     * 根据ID查询任务标签详情
     * 
     * @param id 标签ID
     * @param userId 当前用户ID
     * @return 标签详情
     */
    TaskTagVO getTaskTagById(String id, String userId);

    /**
     * 创建任务标签
     * 
     * @param taskTag 标签信息
     * @param userId 创建者ID
     * @return 创建结果
     */
    Boolean createTaskTag(TaskTag taskTag, String userId);

    /**
     * 更新任务标签
     * 
     * @param taskTag 标签信息
     * @param userId 操作者ID
     * @return 更新结果
     */
    Boolean updateTaskTag(TaskTag taskTag, String userId);

    /**
     * 删除任务标签
     * 
     * @param id 标签ID
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean deleteTaskTag(String id, String userId);

    /**
     * 批量删除任务标签
     * 
     * @param ids 标签ID列表
     * @param userId 操作者ID
     * @return 删除结果
     */
    Boolean batchDeleteTaskTags(List<String> ids, String userId);

    /**
     * 查询所有可用标签
     * 
     * @param userId 当前用户ID
     * @return 标签列表
     */
    List<TaskTagVO> getAllAvailableTags(String userId);

    /**
     * 根据名称查询标签
     * 
     * @param tagName 标签名称
     * @param userId 当前用户ID
     * @return 标签信息
     */
    TaskTagVO getTaskTagByName(String tagName, String userId);

    /**
     * 查询热门标签
     * 
     * @param limit 限制数量
     * @param userId 当前用户ID
     * @return 热门标签列表
     */
    List<TaskTagVO> getPopularTags(Integer limit, String userId);

    /**
     * 查询用户创建的标签
     * 
     * @param userId 用户ID
     * @return 标签列表
     */
    List<TaskTagVO> getUserCreatedTags(String userId);

    /**
     * 搜索标签
     * 
     * @param keyword 关键词
     * @param userId 当前用户ID
     * @return 标签列表
     */
    List<TaskTagVO> searchTags(String keyword, String userId);

    /**
     * 合并标签
     * 
     * @param sourceTagId 源标签ID
     * @param targetTagId 目标标签ID
     * @param userId 操作者ID
     * @return 合并结果
     */
    Boolean mergeTags(String sourceTagId, String targetTagId, String userId);
}
